/**
 * Date:2018年7月23日下午10:43:45
 *
 */

package com.xue.action.sys;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextListener;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * Description: TODO <br/>
 * Date: 2018年7月23日 下午10:43:45 <br/>
 * 参考 https://blog.csdn.net/wilsonsong1024/article/details/80176285<br/>
 * 参考 https://www.cnblogs.com/deng720/p/8989388.html<br/>
 * 在springboot2.0之前 我们都是 继承 WebMvcConfigurerAdapter 来实现url的定向，在springboot
 * 2.0以后<br/>
 * WebMvcConfigurerAdapter<br/>
 * 这个方法已经过时，那怎么来修改呢？改成继承WebMvcConfigurationSupport这个类，在扩展的类中重写父类的方法即可<br/>
 * ，但是这种方式是有问题的，这种方式会屏蔽SpringBoot<br/>
 * 的@EnableAutoConfiguration中的设置。这时候启动项目时会发现映射根本没有成功<br/>
 * ，读取不到静态的资源也就是说application.properties中添加配置的映射配置没有启动作用，然后我们会想到重写来进行映射<br/>
 * 
 * @author xuejianxinokok@163.com
 */
@Configuration
public class MyWebMvcConfigurer implements WebMvcConfigurer {
	private static final Logger logger = LoggerFactory.getLogger(MyWebMvcConfigurer.class);
	
	
	// "/resources/**","/**/*.html"
	private final String[] notLoginInterceptPaths = { "/login/**", "/**/*.html", "/resources/**","/favicon.ico","/*.js" };

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 拦截vue请求,修改请求头
		// registry.addInterceptor(new VueInterceptor()).addPathPatterns("/**/*.vue");

		// 后台用户拦截器
		/*registry.addInterceptor(new LoginInterceptor())
		.addPathPatterns("/admin/**")
		.addPathPatterns("/reloadMenus")//加载菜单
		.excludePathPatterns(notLoginInterceptPaths);*/
		registry.addInterceptor(new LoginInterceptor())
		.addPathPatterns("/**")
		.excludePathPatterns(notLoginInterceptPaths);
		// 前台用户拦截器
		/*
		 * registry.addInterceptor(new UserLoginInterceptor())
		 * .addPathPatterns("/user/**") .addPathPatterns("/checkToken")//
		 * 验证token，为了使没有登录用户跳转到登录 .excludePathPatterns(notLoginInterceptPaths)
		 * .excludePathPatterns("/reloadUserMenus")// 加载菜单
		 * .excludePathPatterns("/user/stock")// 实时行情不拦截 ;
		 */

	}

	/*
	 * @Bean public FastJsonHttpMessageConverter
	 * customFastJsonHttpMessageConverter() { FastJsonHttpMessageConverter
	 * jsonConverter = new FastJsonHttpMessageConverter();
	 * jsonConverter.setCharset(Charset.forName("UTF-8"));
	 * jsonConverter.setFeatures(SerializerFeature.WriteDateUseDateFormat); return
	 * jsonConverter; }
	 * 
	 * @Override public void configureMessageConverters(
	 * List<HttpMessageConverter<?>> converters) {
	 * converters.add(customFastJsonHttpMessageConverter());
	 * super.addDefaultHttpMessageConverters(converters); }
	 */

	// @Override
	// public void configureContentNegotiation(ContentNegotiationConfigurer
	// configurer) {
	// 是否通过请求Url的扩展名来决定media type
	// configurer.favorPathExtension(true).ignoreAcceptHeader(true).useRegisteredExtensionsOnly(false).mediaType("vue",
	// MediaType.APPLICATION_JSON_UTF8);
	// 不检查Accept请求头
	// .ignoreAcceptHeader(true)
	// .parameterName("mediaType")
	// 设置默认的media yype
	// .defaultContentType(MediaType.TEXT_HTML)
	// .mediaType("vue", MediaType.valueOf("application/javascript"))
	// .mediaType("json", MediaType.APPLICATION_JSON)
	// ;
	// }

	
  /*添加filter
	@Bean
	public FilterRegistrationBean filterRegistration() {
		// 新建过滤器注册类
		FilterRegistrationBean registration = new FilterRegistrationBean();
		// 添加自定义 过滤器
		registration.setFilter(globalFilter());
		// 设置过滤器的URL模式
		registration.addUrlPatterns("*.vue");
		// 设置过滤器顺序
		registration.setOrder(1);
		return registration;
	}

	@Bean
	public GlobalFilter globalFilter() {
		return new GlobalFilter();
	}
	*/

	/**
	 * 
	 * Description: 注册RequestContextListener用于获取RequestContextHolder  <br/> 
	 * Date:2019年10月16日 上午9:35:30
	 * @author xuejianxin
	 * @return
	 */
	@Bean
	public ServletListenerRegistrationBean<RequestContextListener> getListener(){
		return new ServletListenerRegistrationBean<>(new RequestContextListener());
	}
	
	
}
